package main

import "fmt"

/*

	-闭包：
		返回匿名函数+匿名函数以外的变量num
	-闭包的本质：
		闭包的本质依旧是一个匿名函数，只是这个函数引入外界的变量/参数

	-匿名函数+引用变量/参数 = 闭包

	闭包的特点：
		（1）返回的是一个匿名函数，但是这个匿名函数引用到函数以外的变量/参数，因此这个匿名函数就和变量/参数形成一个整体，构成闭包
		（2）闭包中使用的变量/参数会一直保存在内存中，所以闭包慎用。
*/

//函数功能： 求和
// 函数名称：getSum参数为空，
// getSum函数返回值为一个函数，该函数的参数为int类型的值，返回值也是int类型
func getSum() func(int) int {
	var sum int = 0
	return func(num int) int {
		sum += num
		return sum
	}
}
func main() {
	// 调用getSum函数
	f := getSum()
	fmt.Println(f(1))
	fmt.Println(f(2))
	fmt.Println(f(3))
	fmt.Println(f(4))

}
